
// Function.prototype.myCall = function (context) {
//     // 原型链 在function上挂载的myCall方法
//     context = context || window;
//     context.fn = this;//this指向函数实例a 最关键的一步
//     let args = [...arguments].slice(1);//这里相当于提取外面传的参数，从第二个开始
//     let result = context.fn(...args);//相当于对象里的函数执行（args就是外面传的参数）
//     delete context.fn;//删除，清除空间
//     return result;
// }

// // 测试 
// let obj = { name: '杰子' };
// function A(x) {
//     console.log(this.name, x);
// }
// A.myCall(obj, 1);// obj 1

Function.prototype.call2=function(context,...args){
    context=context||window
   const fn=Symbol('fn')
   context[fn]=this
   console.log(args);
   
   let result=context[fn](...args)
    delete context[fn]
    return result//要记得返回值
}

// 测试
function a(x,f){
    console.log(this.name,this.age);
    console.log(x,f);
}
let obj1={
    name:'坤坤',
    age:18
}
a.call2(obj1,1,3)


